(* $Id: Registry.sig,v 1.2 1998/08/13 11:35:07 pxs Exp $ *)
(* In a few cases we want (possibly as-yet-unknown) components to be able *)
(* to specify what should happen under common circs like user wants to    *)
(* save whole environment, start with a blank sheet, etc. The Registry    *)
(* keeps track of what should be done and controls the doing of it. The   *)
(* string arguments are for debugging purposes, and should describe the   *)
(* action of the function being registered. *)
signature REGISTRY =
  sig
(* Very simple setup to allow modules to have "critical sections" without *)
(* having to handle them themselves. *)
    val resetTables : unit -> unit
    val registerTableResetter : (string * (unit -> unit)) -> unit

(* Printing bindings of things: *)
    val registerPrinter : (string * (unit -> unit)) -> unit
      
(* Forgetting bindings of things: *)
    val registerForgetter : (string * (unit -> unit)) -> unit
      
  end
